#include <cstdio>
#define MAXN 100

void dllb(int l,int si,int sj,int sn,int d[][MAXN]){
    int n,i=0,j=l/2;
    for (n=1;n<=l*l;n++){
        d[i+si][j+sj]=n+sn;
        if (n%l){
            i=(i)?(i-1):(l-1);
            j=(j==l-1)?0:(j+1);
        }
        else
            i=(i==l-1)?0:(i+1);
    }
}

void magic_odd(int l,int d[][MAXN]){
    dllb(l,0,0,0,d);
}

void magic_4k(int l,int d[][MAXN]){
    int i,j;
    for (i=0;i<l;i++)
        for (j=0;j<l;j++)
            d[i][j]=((i%4==0||i%4==3)&&(j%4==0||j%4==3)||(i%4==1||i%4==2)&&(j%4==1||j%4==2))?(l*l-(i*l+j)):(i*l+j+1);
}

void magic_other(int l,int d[][MAXN]){
    int i,j,t;
    dllb(l/2,0,0,0,d);
    dllb(l/2,l/2,l/2,l*l/4,d);
    dllb(l/2,0,l/2,l*l/2,d);
    dllb(l/2,l/2,0,l*l/4*3,d);
    for (i=0;i<l/2;i++)
        for (j=0;j<l/4;j++)
            if (i!=l/4||j)
                t=d[i][j],d[i][j]=d[i+l/2][j],d[i+l/2][j]=t;
    t=d[l/4][l/4],d[l/4][l/4]=d[l/4+l/2][l/4],d[l/4+l/2][l/4]=t;
    for (i=0;i<l/2;i++)
        for (j=l-l/4+1;j<l;j++)
            t=d[i][j],d[i][j]=d[i+l/2][j],d[i+l/2][j]=t;
}

void generate(int l,int d[][MAXN]){
    if (l%2)
        magic_odd(l,d);
    else if (l%4==0)
        magic_4k(l,d);
    else
        magic_other(l,d);
}

int d[ MAXN ][ MAXN ];

int main( )
{
    int n, t, i, j;
    scanf("%d", &t);
    while ( t-- )
    {
        scanf("%d", &n);
        generate( n, d );
        for ( i = 0; i < n; i++ )
        {
            for ( j = 0; j < n; j++ )
                printf("%4d", d[ i ][ j ]);
            printf("\n");
        }
    }
    return 0;
}
